define('uploadify', function(require, exports, module) {
   if(window.$.fn && !$.fn.uploadify){
        /*
        SWFObject v2.2 <http://code.google.com/p/swfobject/>
        is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
        */
        ;var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;
        if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;
        X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);
        ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0;}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");
        if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)];}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac};
        }(),k=function(){if(!M.w3){return;}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f();
        }if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false);}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);
        f();}});if(O==top){(function(){if(J){return;}try{j.documentElement.doScroll("left");}catch(X){setTimeout(arguments.callee,0);return;}f();})();}}if(M.wk){(function(){if(J){return;
        }if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return;}f();})();}s(f);}}();function f(){if(J){return;}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));
        Z.parentNode.removeChild(Z);}catch(aa){return;}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]();}}function K(X){if(J){X();}else{U[U.length]=X;}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false);
        }else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false);}else{if(typeof O.attachEvent!=D){i(O,"onload",Y);}else{if(typeof O.onload=="function"){var X=O.onload;
        O.onload=function(){X();Y();};}else{O.onload=Y;}}}}}function h(){if(T){V();}else{H();}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);
        aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");
        M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)];}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return;}}X.removeChild(aa);Z=null;H();
        })();}else{H();}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);
        if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa);}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;
        ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class");}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align");
        }var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value");
        }}P(ai,ah,Y,ab);}else{p(ae);if(ab){ab(aa);}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z;}ab(aa);}}}}}function z(aa){var X=null;
        var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y;}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z;}}}return X;}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312);
        }function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null;}else{l=ae;Q=X;}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310";
        }if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137";}j.title=j.title.slice(0,47)+" - Flash Player Installation";
        var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac;
        }else{ab.flashvars=ac;}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";
        (function(){if(ae.readyState==4){ae.parentNode.removeChild(ae);}else{setTimeout(arguments.callee,10);}})();}u(aa,ab,X);}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");
        Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y);}else{setTimeout(arguments.callee,10);
        }})();}else{Y.parentNode.replaceChild(g(Y),Y);}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML;}else{var Y=ab.getElementsByTagName(r)[0];
        if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true));
        }}}}}return aa;}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X;}if(aa){if(typeof ai.id==D){ai.id=Y;}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae];
        }else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"';}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"';}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />';
        }}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id);}else{var Z=C(r);Z.setAttribute("type",q);
        for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac]);}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac]);
        }}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab]);}}aa.parentNode.replaceChild(Z,aa);X=Z;}}return X;}function e(Z,X,Y){var aa=C("param");
        aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa);}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";
        (function(){if(X.readyState==4){b(Y);}else{setTimeout(arguments.callee,10);}})();}else{X.parentNode.removeChild(X);}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null;
        }}Y.parentNode.removeChild(Y);}}function c(Z){var X=null;try{X=j.getElementById(Z);}catch(Y){}return X;}function C(X){return j.createElement(X);}function i(Z,X,Y){Z.attachEvent(X,Y);
        I[I.length]=[Z,X,Y];}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false;
        }function v(ac,Y,ad,ab){if(M.ie&&M.mac){return;}var aa=j.getElementsByTagName("head")[0];if(!aa){return;}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;
        G=null;}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1];
        }G=X;}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y);}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"));
        }}}function w(Z,X){if(!m){return;}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y;}else{v("#"+Z,"visibility:"+Y);}}function L(Y){var Z=/[\\\"<>\.;]/;
        var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y;}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;
        for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2]);}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa]);}for(var Y in M){M[Y]=null;}M=null;for(var X in swfobject){swfobject[X]=null;
        }swfobject=null;});}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;
        w(ab,false);}else{if(Z){Z({success:false,id:ab});}}},getObjectById:function(X){if(M.w3){return z(X);}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};
        if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al];}}aj.data=ab;
        aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak];}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai];
        }else{am.flashvars=ai+"="+Z[ai];}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true);}X.success=true;X.ref=an;}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);
        return;}else{w(ah,true);}}if(ac){ac(X);}});}else{if(ac){ac(X);}}},switchOffAutoHideShow:function(){m=false;},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]};
        },hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X);}else{return undefined;}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y);
        }},removeSWF:function(X){if(M.w3){y(X);}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X);}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;
        if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1];}if(aa==null){return L(Z);}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)));
        }}}return"";},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block";
        }}if(E){E(B);}}a=false;}}};}();

        /*
        SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com

        mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/

        SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
        http://www.opensource.org/licenses/mit-license.php

        SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
        http://www.opensource.org/licenses/mit-license.php
        */
        var SWFUpload;
        if (SWFUpload == undefined) {
            SWFUpload = function(a) {
                this.initSWFUpload(a)
            }
        }

        SWFUpload.prototype.initSWFUpload = function(b) {
            try {
                this.customSettings = {};
                this.settings = b;
                this.eventQueue = [];
                this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
                this.movieElement = null;
                SWFUpload.instances[this.movieName] = this;
                this.initSettings();
                this.loadFlash();
                this.displayDebugInfo()
            } catch(a) {
                delete SWFUpload.instances[this.movieName];
                throw a
            }
        };
        SWFUpload.instances = {};
        SWFUpload.movieCount = 0;
        SWFUpload.version = "2.2.0 2009-03-25";
        SWFUpload.QUEUE_ERROR = {
            QUEUE_LIMIT_EXCEEDED: -100,
            FILE_EXCEEDS_SIZE_LIMIT: -110,
            ZERO_BYTE_FILE: -120,
            INVALID_FILETYPE: -130
        };
        SWFUpload.UPLOAD_ERROR = {
            HTTP_ERROR: -200,
            MISSING_UPLOAD_URL: -210,
            IO_ERROR: -220,
            SECURITY_ERROR: -230,
            UPLOAD_LIMIT_EXCEEDED: -240,
            UPLOAD_FAILED: -250,
            SPECIFIED_FILE_ID_NOT_FOUND: -260,
            FILE_VALIDATION_FAILED: -270,
            FILE_CANCELLED: -280,
            UPLOAD_STOPPED: -290
        };
        SWFUpload.FILE_STATUS = {
            QUEUED: -1,
            IN_PROGRESS: -2,
            ERROR: -3,
            COMPLETE: -4,
            CANCELLED: -5
        };
        SWFUpload.BUTTON_ACTION = {
            SELECT_FILE: -100,
            SELECT_FILES: -110,
            START_UPLOAD: -120
        };
        SWFUpload.CURSOR = {
            ARROW: -1,
            HAND: -2
        };
        SWFUpload.WINDOW_MODE = {
            WINDOW: "window",
            TRANSPARENT: "transparent",
            OPAQUE: "opaque"
        };
        SWFUpload.completeURL = function(a) {
            if (typeof(a) !== "string" || a.match(/^https?:\/\//i) || a.match(/^\//)) {
                return a
            }
            var c = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port: "");
            var b = window.location.pathname.lastIndexOf("/");
            if (b <= 0) {
                path = "/"
            } else {
                path = window.location.pathname.substr(0, b) + "/"
            }
            return path + a
        };
        SWFUpload.prototype.initSettings = function() {
            this.ensureDefault = function(b, a) {
                this.settings[b] = (this.settings[b] == undefined) ? a: this.settings[b]
            };
            this.ensureDefault("upload_url", "");
            this.ensureDefault("preserve_relative_urls", false);
            this.ensureDefault("file_post_name", "Filedata");
            this.ensureDefault("post_params", {});
            this.ensureDefault("use_query_string", false);
            this.ensureDefault("requeue_on_error", false);
            this.ensureDefault("http_success", []);
            this.ensureDefault("assume_success_timeout", 0);
            this.ensureDefault("file_types", "*.*");
            this.ensureDefault("file_types_description", "All Files");
            this.ensureDefault("file_size_limit", 0);
            this.ensureDefault("file_upload_limit", 0);
            this.ensureDefault("file_queue_limit", 0);
            this.ensureDefault("flash_url", "swfupload.swf");
            this.ensureDefault("prevent_swf_caching", true);
            this.ensureDefault("button_image_url", "");
            this.ensureDefault("button_width", 1);
            this.ensureDefault("button_height", 1);
            this.ensureDefault("button_text", "");
            this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;");
            this.ensureDefault("button_text_top_padding", 0);
            this.ensureDefault("button_text_left_padding", 0);
            this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
            this.ensureDefault("button_disabled", false);
            this.ensureDefault("button_placeholder_id", "");
            this.ensureDefault("button_placeholder", null);
            this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW);
            this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW);
            this.ensureDefault("debug", false);
            this.settings.debug_enabled = this.settings.debug;
            this.settings.return_upload_start_handler = this.returnUploadStart;
            this.ensureDefault("swfupload_loaded_handler", null);
            this.ensureDefault("file_dialog_start_handler", null);
            this.ensureDefault("file_queued_handler", null);
            this.ensureDefault("file_queue_error_handler", null);
            this.ensureDefault("file_dialog_complete_handler", null);
            this.ensureDefault("upload_start_handler", null);
            this.ensureDefault("upload_progress_handler", null);
            this.ensureDefault("upload_error_handler", null);
            this.ensureDefault("upload_success_handler", null);
            this.ensureDefault("upload_complete_handler", null);
            this.ensureDefault("debug_handler", this.debugMessage);
            this.ensureDefault("custom_settings", {});
            this.customSettings = this.settings.custom_settings;
            if ( !! this.settings.prevent_swf_caching) {
                this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?": "&") + "preventswfcaching=" + new Date().getTime()
            }
            if (!this.settings.preserve_relative_urls) {
                this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);
                this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url)
            }
            delete this.ensureDefault
        };
        SWFUpload.prototype.loadFlash = function() {
            var a, b;
            if (document.getElementById(this.movieName) !== null) {
                throw "ID " + this.movieName + " is already in use. The Flash Object could not be added"
            }
            a = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder;
            if (a == undefined) {
                throw "Could not find the placeholder element: " + this.settings.button_placeholder_id
            }
            b = document.createElement("div");
            b.innerHTML = this.getFlashHTML();
            a.parentNode.replaceChild(b.firstChild, a);
            if (window[this.movieName] == undefined) {
                window[this.movieName] = this.getMovieElement()
            }
        };
        SWFUpload.prototype.getFlashHTML = function() {
            return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">', '<param name="wmode" value="', this.settings.button_window_mode, '" />', '<param name="movie" value="', this.settings.flash_url, '" />', '<param name="quality" value="high" />', '<param name="menu" value="false" />', '<param name="allowScriptAccess" value="always" />', '<param name="flashvars" value="' + this.getFlashVars() + '" />', "</object>"].join("")
        };
        SWFUpload.prototype.getFlashVars = function() {
            var b = this.buildParamString();
            var a = this.settings.http_success.join(",");
            return ["movieName=", encodeURIComponent(this.movieName), "&amp;uploadURL=", encodeURIComponent(this.settings.upload_url), "&amp;useQueryString=", encodeURIComponent(this.settings.use_query_string), "&amp;requeueOnError=", encodeURIComponent(this.settings.requeue_on_error), "&amp;httpSuccess=", encodeURIComponent(a), "&amp;assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout), "&amp;params=", encodeURIComponent(b), "&amp;filePostName=", encodeURIComponent(this.settings.file_post_name), "&amp;fileTypes=", encodeURIComponent(this.settings.file_types), "&amp;fileTypesDescription=", encodeURIComponent(this.settings.file_types_description), "&amp;fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit), "&amp;fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit), "&amp;fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit), "&amp;debugEnabled=", encodeURIComponent(this.settings.debug_enabled), "&amp;buttonImageURL=", encodeURIComponent(this.settings.button_image_url), "&amp;buttonWidth=", encodeURIComponent(this.settings.button_width), "&amp;buttonHeight=", encodeURIComponent(this.settings.button_height), "&amp;buttonText=", encodeURIComponent(this.settings.button_text), "&amp;buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding), "&amp;buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding), "&amp;buttonTextStyle=", encodeURIComponent(this.settings.button_text_style), "&amp;buttonAction=", encodeURIComponent(this.settings.button_action), "&amp;buttonDisabled=", encodeURIComponent(this.settings.button_disabled), "&amp;buttonCursor=", encodeURIComponent(this.settings.button_cursor)].join("")
        };
        SWFUpload.prototype.getMovieElement = function() {
            if (this.movieElement == undefined) {
                this.movieElement = document.getElementById(this.movieName)
            }
            if (this.movieElement === null) {
                throw "Could not find Flash element"
            }
            return this.movieElement
        };
        SWFUpload.prototype.buildParamString = function() {
            var c = this.settings.post_params;
            var b = [];
            if (typeof(c) === "object") {
                for (var a in c) {
                    if (c.hasOwnProperty(a)) {
                        b.push(encodeURIComponent(a.toString()) + "=" + encodeURIComponent(c[a].toString()))
                    }
                }
            }
            return b.join("&amp;")
        };
        SWFUpload.prototype.destroy = function() {
            try {
                this.cancelUpload(null, false);
                var a = null;
                a = this.getMovieElement();
                if (a && typeof(a.CallFunction) === "unknown") {
                    for (var c in a) {
                        try {
                            if (typeof(a[c]) === "function") {
                                a[c] = null
                            }
                        } catch(e) {}
                    }
                    try {
                        a.parentNode.removeChild(a)
                    } catch(b) {}
                }
                window[this.movieName] = null;
                SWFUpload.instances[this.movieName] = null;
                delete SWFUpload.instances[this.movieName];
                this.movieElement = null;
                this.settings = null;
                this.customSettings = null;
                this.eventQueue = null;
                this.movieName = null;
                return true
            } catch(d) {
                return false
            }
        };
        SWFUpload.prototype.displayDebugInfo = function() {
            this.debug(["---SWFUpload Instance Info---\n", "Version: ", SWFUpload.version, "\n", "Movie Name: ", this.movieName, "\n", "Settings:\n", "\t", "upload_url:               ", this.settings.upload_url, "\n", "\t", "flash_url:                ", this.settings.flash_url, "\n", "\t", "use_query_string:         ", this.settings.use_query_string.toString(), "\n", "\t", "requeue_on_error:         ", this.settings.requeue_on_error.toString(), "\n", "\t", "http_success:             ", this.settings.http_success.join(", "), "\n", "\t", "assume_success_timeout:   ", this.settings.assume_success_timeout, "\n", "\t", "file_post_name:           ", this.settings.file_post_name, "\n", "\t", "post_params:              ", this.settings.post_params.toString(), "\n", "\t", "file_types:               ", this.settings.file_types, "\n", "\t", "file_types_description:   ", this.settings.file_types_description, "\n", "\t", "file_size_limit:          ", this.settings.file_size_limit, "\n", "\t", "file_upload_limit:        ", this.settings.file_upload_limit, "\n", "\t", "file_queue_limit:         ", this.settings.file_queue_limit, "\n", "\t", "debug:                    ", this.settings.debug.toString(), "\n", "\t", "prevent_swf_caching:      ", this.settings.prevent_swf_caching.toString(), "\n", "\t", "button_placeholder_id:    ", this.settings.button_placeholder_id.toString(), "\n", "\t", "button_placeholder:       ", (this.settings.button_placeholder ? "Set": "Not Set"), "\n", "\t", "button_image_url:         ", this.settings.button_image_url.toString(), "\n", "\t", "button_width:             ", this.settings.button_width.toString(), "\n", "\t", "button_height:            ", this.settings.button_height.toString(), "\n", "\t", "button_text:              ", this.settings.button_text.toString(), "\n", "\t", "button_text_style:        ", this.settings.button_text_style.toString(), "\n", "\t", "button_text_top_padding:  ", this.settings.button_text_top_padding.toString(), "\n", "\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n", "\t", "button_action:            ", this.settings.button_action.toString(), "\n", "\t", "button_disabled:          ", this.settings.button_disabled.toString(), "\n", "\t", "custom_settings:          ", this.settings.custom_settings.toString(), "\n", "Event Handlers:\n", "\t", "swfupload_loaded_handler assigned:  ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n", "\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n", "\t", "file_queued_handler assigned:       ", (typeof this.settings.file_queued_handler === "function").toString(), "\n", "\t", "file_queue_error_handler assigned:  ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n", "\t", "upload_start_handler assigned:      ", (typeof this.settings.upload_start_handler === "function").toString(), "\n", "\t", "upload_progress_handler assigned:   ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n", "\t", "upload_error_handler assigned:      ", (typeof this.settings.upload_error_handler === "function").toString(), "\n", "\t", "upload_success_handler assigned:    ", (typeof this.settings.upload_success_handler === "function").toString(), "\n", "\t", "upload_complete_handler assigned:   ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n", "\t", "debug_handler assigned:             ", (typeof this.settings.debug_handler === "function").toString(), "\n"].join(""))
        };
        SWFUpload.prototype.addSetting = function(b, c, a) {
            if (c == undefined) {
                return (this.settings[b] = a)
            } else {
                return (this.settings[b] = c)
            }
        };
        SWFUpload.prototype.getSetting = function(a) {
            if (this.settings[a] != undefined) {
                return this.settings[a]
            }
            return ""
        };
        SWFUpload.prototype.callFlash = function(functionName, argumentArray) {
            argumentArray = argumentArray || [];
            var movieElement = this.getMovieElement();
            var returnValue, returnString;
            try {
                returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + "</invoke>");
                returnValue = eval(returnString)
            } catch(ex) {
                throw "Call to " + functionName + " failed"
            }
            if (returnValue != undefined && typeof returnValue.post === "object") {
                returnValue = this.unescapeFilePostParams(returnValue)
            }
            return returnValue
        };
        SWFUpload.prototype.selectFile = function() {
            this.callFlash("SelectFile")
        };
        SWFUpload.prototype.selectFiles = function() {
            this.callFlash("SelectFiles")
        };
        SWFUpload.prototype.startUpload = function(a) {
            this.callFlash("StartUpload", [a])
        };
        SWFUpload.prototype.cancelUpload = function(a, b) {
            if (b !== false) {
                b = true
            }
            this.callFlash("CancelUpload", [a, b])
        };
        SWFUpload.prototype.stopUpload = function() {
            this.callFlash("StopUpload")
        };
        SWFUpload.prototype.getStats = function() {
            return this.callFlash("GetStats")
        };
        SWFUpload.prototype.setStats = function(a) {
            this.callFlash("SetStats", [a])
        };
        SWFUpload.prototype.getFile = function(a) {
            if (typeof(a) === "number") {
                return this.callFlash("GetFileByIndex", [a])
            } else {
                return this.callFlash("GetFile", [a])
            }
        };
        SWFUpload.prototype.addFileParam = function(a, b, c) {
            return this.callFlash("AddFileParam", [a, b, c])
        };
        SWFUpload.prototype.removeFileParam = function(a, b) {
            this.callFlash("RemoveFileParam", [a, b])
        };
        SWFUpload.prototype.setUploadURL = function(a) {
            this.settings.upload_url = a.toString();
            this.callFlash("SetUploadURL", [a])
        };
        SWFUpload.prototype.setPostParams = function(a) {
            this.settings.post_params = a;
            this.callFlash("SetPostParams", [a])
        };
        SWFUpload.prototype.addPostParam = function(a, b) {
            this.settings.post_params[a] = b;
            this.callFlash("SetPostParams", [this.settings.post_params])
        };
        SWFUpload.prototype.removePostParam = function(a) {
            delete this.settings.post_params[a];
            this.callFlash("SetPostParams", [this.settings.post_params])
        };
        SWFUpload.prototype.setFileTypes = function(a, b) {
            this.settings.file_types = a;
            this.settings.file_types_description = b;
            this.callFlash("SetFileTypes", [a, b])
        };
        SWFUpload.prototype.setFileSizeLimit = function(a) {
            this.settings.file_size_limit = a;
            this.callFlash("SetFileSizeLimit", [a])
        };
        SWFUpload.prototype.setFileUploadLimit = function(a) {
            this.settings.file_upload_limit = a;
            this.callFlash("SetFileUploadLimit", [a])
        };
        SWFUpload.prototype.setFileQueueLimit = function(a) {
            this.settings.file_queue_limit = a;
            this.callFlash("SetFileQueueLimit", [a])
        };
        SWFUpload.prototype.setFilePostName = function(a) {
            this.settings.file_post_name = a;
            this.callFlash("SetFilePostName", [a])
        };
        SWFUpload.prototype.setUseQueryString = function(a) {
            this.settings.use_query_string = a;
            this.callFlash("SetUseQueryString", [a])
        };
        SWFUpload.prototype.setRequeueOnError = function(a) {
            this.settings.requeue_on_error = a;
            this.callFlash("SetRequeueOnError", [a])
        };
        SWFUpload.prototype.setHTTPSuccess = function(a) {
            if (typeof a === "string") {
                a = a.replace(" ", "").split(",")
            }
            this.settings.http_success = a;
            this.callFlash("SetHTTPSuccess", [a])
        };
        SWFUpload.prototype.setAssumeSuccessTimeout = function(a) {
            this.settings.assume_success_timeout = a;
            this.callFlash("SetAssumeSuccessTimeout", [a])
        };
        SWFUpload.prototype.setDebugEnabled = function(a) {
            this.settings.debug_enabled = a;
            this.callFlash("SetDebugEnabled", [a])
        };
        SWFUpload.prototype.setButtonImageURL = function(a) {
            if (a == undefined) {
                a = ""
            }
            this.settings.button_image_url = a;
            this.callFlash("SetButtonImageURL", [a])
        };
        SWFUpload.prototype.setButtonDimensions = function(c, a) {
            this.settings.button_width = c;
            this.settings.button_height = a;
            var b = this.getMovieElement();
            if (b != undefined) {
                b.style.width = c + "px";
                b.style.height = a + "px"
            }
            this.callFlash("SetButtonDimensions", [c, a])
        };
        SWFUpload.prototype.setButtonText = function(a) {
            this.settings.button_text = a;
            this.callFlash("SetButtonText", [a])
        };
        SWFUpload.prototype.setButtonTextPadding = function(b, a) {
            this.settings.button_text_top_padding = a;
            this.settings.button_text_left_padding = b;
            this.callFlash("SetButtonTextPadding", [b, a])
        };
        SWFUpload.prototype.setButtonTextStyle = function(a) {
            this.settings.button_text_style = a;
            this.callFlash("SetButtonTextStyle", [a])
        };
        SWFUpload.prototype.setButtonDisabled = function(a) {
            this.settings.button_disabled = a;
            this.callFlash("SetButtonDisabled", [a])
        };
        SWFUpload.prototype.setButtonAction = function(a) {
            this.settings.button_action = a;
            this.callFlash("SetButtonAction", [a])
        };
        SWFUpload.prototype.setButtonCursor = function(a) {
            this.settings.button_cursor = a;
            this.callFlash("SetButtonCursor", [a])
        };
        SWFUpload.prototype.queueEvent = function(b, c) {
            if (c == undefined) {
                c = []
            } else {
                if (! (c instanceof Array)) {
                    c = [c]
                }
            }
            var a = this;
            if (typeof this.settings[b] === "function") {
                this.eventQueue.push(function() {
                    this.settings[b].apply(this, c)
                });
                setTimeout(function() {
                    a.executeNextEvent()
                },
                0)
            } else {
                if (this.settings[b] !== null) {
                    throw "Event handler " + b + " is unknown or is not a function"
                }
            }
        };
        SWFUpload.prototype.executeNextEvent = function() {
            var a = this.eventQueue ? this.eventQueue.shift() : null;
            if (typeof(a) === "function") {
                a.apply(this)
            }
        };
        SWFUpload.prototype.unescapeFilePostParams = function(c) {
            var e = /[$]([0-9a-f]{4})/i;
            var f = {};
            var d;
            if (c != undefined) {
                for (var a in c.post) {
                    if (c.post.hasOwnProperty(a)) {
                        d = a;
                        var b;
                        while ((b = e.exec(d)) !== null) {
                            d = d.replace(b[0], String.fromCharCode(parseInt("0x" + b[1], 16)))
                        }
                        f[d] = c.post[a]
                    }
                }
                c.post = f
            }
            return c
        };
        SWFUpload.prototype.testExternalInterface = function() {
            try {
                return this.callFlash("TestExternalInterface")
            } catch(a) {
                return false
            }
        };
        SWFUpload.prototype.flashReady = function() {
            var a = this.getMovieElement();
            if (!a) {
                this.debug("Flash called back ready but the flash movie can't be found.");
                return
            }
            this.cleanUp(a);
            this.queueEvent("swfupload_loaded_handler")
        };
        SWFUpload.prototype.cleanUp = function(a) {
            try {
                if (this.movieElement && typeof(a.CallFunction) === "unknown") {
                    this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");
                    for (var c in a) {
                        try {
                            if (typeof(a[c]) === "function") {
                                a[c] = null
                            }
                        } catch(b) {}
                    }
                }
            } catch(d) {}
            window.__flash__removeCallback = function(e, f) {
                try {
                    if (e) {
                        e[f] = null
                    }
                } catch(g) {}
            }
        };
        SWFUpload.prototype.fileDialogStart = function() {
            this.queueEvent("file_dialog_start_handler")
        };
        SWFUpload.prototype.fileQueued = function(a) {
            a = this.unescapeFilePostParams(a);
            this.queueEvent("file_queued_handler", a)
        };
        SWFUpload.prototype.fileQueueError = function(a, c, b) {
            a = this.unescapeFilePostParams(a);
            this.queueEvent("file_queue_error_handler", [a, c, b])
        };
        SWFUpload.prototype.fileDialogComplete = function(b, c, a) {
            this.queueEvent("file_dialog_complete_handler", [b, c, a])
        };
        SWFUpload.prototype.uploadStart = function(a) {
            a = this.unescapeFilePostParams(a);
            this.queueEvent("return_upload_start_handler", a)
        };
        SWFUpload.prototype.returnUploadStart = function(a) {
            var b;
            if (typeof this.settings.upload_start_handler === "function") {
                a = this.unescapeFilePostParams(a);
                b = this.settings.upload_start_handler.call(this, a)
            } else {
                if (this.settings.upload_start_handler != undefined) {
                    throw "upload_start_handler must be a function"
                }
            }
            if (b === undefined) {
                b = true
            }
            b = !!b;
            this.callFlash("ReturnUploadStart", [b])
        };
        SWFUpload.prototype.uploadProgress = function(a, c, b) {
            a = this.unescapeFilePostParams(a);
            this.queueEvent("upload_progress_handler", [a, c, b])
        };
        SWFUpload.prototype.uploadError = function(a, c, b) {
            a = this.unescapeFilePostParams(a);
            this.queueEvent("upload_error_handler", [a, c, b])
        };
        SWFUpload.prototype.uploadSuccess = function(b, a, c) {
            b = this.unescapeFilePostParams(b);
            this.queueEvent("upload_success_handler", [b, a, c])
        };
        SWFUpload.prototype.uploadComplete = function(a) {
            a = this.unescapeFilePostParams(a);
            this.queueEvent("upload_complete_handler", a)
        };
        SWFUpload.prototype.debug = function(a) {
            this.queueEvent("debug_handler", a)
        };
        SWFUpload.prototype.debugMessage = function(c) {
            if (this.settings.debug) {
                var a, d = [];
                if (typeof c === "object" && typeof c.name === "string" && typeof c.message === "string") {
                    for (var b in c) {
                        if (c.hasOwnProperty(b)) {
                            d.push(b + ": " + c[b])
                        }
                    }
                    a = d.join("\n") || "";
                    d = a.split("\n");
                    a = "EXCEPTION: " + d.join("\nEXCEPTION: ");
                    SWFUpload.Console.writeLine(a)
                } else {
                    SWFUpload.Console.writeLine(c)
                }
            }
        };
        SWFUpload.Console = {};
        SWFUpload.Console.writeLine = function(d) {
            var b, a;
            try {
                b = document.getElementById("SWFUpload_Console");
                if (!b) {
                    a = document.createElement("form");
                    document.getElementsByTagName("body")[0].appendChild(a);
                    b = document.createElement("textarea");
                    b.id = "SWFUpload_Console";
                    b.style.fontFamily = "monospace";
                    b.setAttribute("wrap", "off");
                    b.wrap = "off";
                    b.style.overflow = "auto";
                    b.style.width = "700px";
                    b.style.height = "350px";
                    b.style.margin = "5px";
                    a.appendChild(b)
                }
                b.value += d + "\n";
                b.scrollTop = b.scrollHeight - b.clientHeight
            } catch(c) {
                ui.error("Exception: " + c.name + " Message: " + c.message)
            }
        };

        /*
        Uploadify v3.2.1
        Copyright (c) 2012 Reactive Apps, Ronnie Garcia
        Released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
        */

        (function($) {

            // These methods can be called by adding them as the first argument in the uploadify plugin call
            var methods = {

                init : function(options, swfUploadOptions) {

                    return this.each(function() {

                        // Create a reference to the jQuery DOM object
                        var $this = $(this);

                        // Clone the original DOM object
                        var $clone = $this.clone();

                        // Setup the default options
                        var settings = $.extend({
                            // Required Settings
                            id       : $this.attr('id'), // The ID of the DOM object
                            swf      : 'uploadify.swf',  // The path to the uploadify SWF file
                            uploader : 'uploadify.php',  // The path to the server-side upload script

                            // Options
                            auto            : true,               // Automatically upload files when added to the queue
                            buttonClass     : '',                 // A class name to add to the browse button DOM object
                            buttonCursor    : 'hand',             // The cursor to use with the browse button
                            buttonImage     : null,               // (String or null) The path to an image to use for the Flash browse button if not using CSS to style the button
                            buttonText      : 'SELECT FILES',     // The text to use for the browse button
                            checkExisting   : false,              // The path to a server-side script that checks for existing files on the server
                            debug           : false,              // Turn on swfUpload debugging mode
                            fileObjName     : 'Filedata',         // The name of the file object to use in your server-side script
                            fileSizeLimit   : 0,                  // The maximum size of an uploadable file in KB (Accepts units B KB MB GB if string, 0 for no limit)
                            fileTypeDesc    : 'All Files',        // The description for file types in the browse dialog
                            fileTypeExts    : '*.*',              // Allowed extensions in the browse dialog (server-side validation should also be used)
                            height          : 30,                 // The height of the browse button
                            itemTemplate    : false,              // The template for the file item in the queue
                            method          : 'post',             // The method to use when sending files to the server-side upload script
                            multi           : true,               // Allow multiple file selection in the browse dialog
                            formData        : {},                 // An object with additional data to send to the server-side upload script with every file upload
                            preventCaching  : true,               // Adds a random value to the Flash URL to prevent caching of it (conflicts with existing parameters)
                            progressData    : 'percentage',       // ('percentage' or 'speed') Data to show in the queue item during a file upload
                            queueID         : false,              // The ID of the DOM object to use as a file queue (without the #)
                            queueSizeLimit  : 999,                // The maximum number of files that can be in the queue at one time
                            removeCompleted : true,               // Remove queue items from the queue when they are done uploading
                            removeTimeout   : 3,                  // The delay in seconds before removing a queue item if removeCompleted is set to true
                            requeueErrors   : false,              // Keep errored files in the queue and keep trying to upload them
                            successTimeout  : 90,                 // The number of seconds to wait for Flash to detect the server's response after the file has finished uploading
                            uploadLimit     : 0,                  // The maximum number of files you can upload
                            width           : 120,                // The width of the browse button

                            // Events
                            overrideEvents  : []             // (Array) A list of default event handlers to skip
                            /*
                            onCancel         // Triggered when a file is cancelled from the queue
                            onClearQueue     // Triggered during the 'clear queue' method
                            onDestroy        // Triggered when the uploadify object is destroyed
                            onDialogClose    // Triggered when the browse dialog is closed
                            onDialogOpen     // Triggered when the browse dialog is opened
                            onDisable        // Triggered when the browse button gets disabled
                            onEnable         // Triggered when the browse button gets enabled
                            onFallback       // Triggered is Flash is not detected
                            onInit           // Triggered when Uploadify is initialized
                            onQueueComplete  // Triggered when all files in the queue have been uploaded
                            onSelectError    // Triggered when an error occurs while selecting a file (file size, queue size limit, etc.)
                            onSelect         // Triggered for each file that is selected
                            onSWFReady       // Triggered when the SWF button is loaded
                            onUploadComplete // Triggered when a file upload completes (success or error)
                            onUploadError    // Triggered when a file upload returns an error
                            onUploadSuccess  // Triggered when a file is uploaded successfully
                            onUploadProgress // Triggered every time a file progress is updated
                            onUploadStart    // Triggered immediately before a file upload starts
                            */
                        }, options);

                        // Prepare settings for SWFUpload
                        var swfUploadSettings = {
                            assume_success_timeout   : settings.successTimeout,
                            button_placeholder_id    : settings.id,
                            button_width             : settings.width,
                            button_height            : settings.height,
                            button_text              : null,
                            button_text_style        : null,
                            button_text_top_padding  : 0,
                            button_text_left_padding : 0,
                            button_action            : (settings.multi ? SWFUpload.BUTTON_ACTION.SELECT_FILES : SWFUpload.BUTTON_ACTION.SELECT_FILE),
                            button_disabled          : false,
                            button_cursor            : (settings.buttonCursor == 'arrow' ? SWFUpload.CURSOR.ARROW : SWFUpload.CURSOR.HAND),
                            button_window_mode       : SWFUpload.WINDOW_MODE.TRANSPARENT,
                            debug                    : settings.debug,
                            requeue_on_error         : settings.requeueErrors,
                            file_post_name           : settings.fileObjName,
                            file_size_limit          : settings.fileSizeLimit,
                            file_types               : settings.fileTypeExts,
                            file_types_description   : settings.fileTypeDesc,
                            file_queue_limit         : settings.queueSizeLimit,
                            file_upload_limit        : settings.uploadLimit,
                            flash_url                : settings.swf,
                            prevent_swf_caching      : settings.preventCaching,
                            post_params              : settings.formData,
                            upload_url               : settings.uploader,
                            use_query_string         : (settings.method == 'get'),

                            // Event Handlers
                            file_dialog_complete_handler : handlers.onDialogClose,
                            file_dialog_start_handler    : handlers.onDialogOpen,
                            file_queued_handler          : handlers.onSelect,
                            file_queue_error_handler     : handlers.onSelectError,
                            swfupload_loaded_handler     : settings.onSWFReady,
                            upload_complete_handler      : handlers.onUploadComplete,
                            upload_error_handler         : handlers.onUploadError,
                            upload_progress_handler      : handlers.onUploadProgress,
                            upload_start_handler         : handlers.onUploadStart,
                            upload_success_handler       : handlers.onUploadSuccess
                        }

                        // Merge the user-defined options with the defaults
                        if (swfUploadOptions) {
                            swfUploadSettings = $.extend(swfUploadSettings, swfUploadOptions);
                        }
                        // Add the user-defined settings to the swfupload object
                        swfUploadSettings = $.extend(swfUploadSettings, settings);

                        // Detect if Flash is available
                        var playerVersion  = swfobject.getFlashPlayerVersion();
                        var flashInstalled = (playerVersion.major >= 9);
                        if (flashInstalled) {
                            // Create the swfUpload instance
                            window['uploadify_' + settings.id] = new SWFUpload(swfUploadSettings);
                            var swfuploadify = window['uploadify_' + settings.id];

                            // Add the SWFUpload object to the elements data object
                            $this.data('uploadify', swfuploadify);

                            // Wrap the instance
                            var $wrapper = $('<div />', {
                                'id'    : settings.id,
                                'class' : 'uploadify',
                                'css'   : {
                                            'height'   : settings.height + 'px',
                                            'width'    : settings.width + 'px'
                                          }
                            });
                            $('#' + swfuploadify.movieName).wrap($wrapper);
                            // Recreate the reference to wrapper
                            $wrapper = $('#' + settings.id);
                            // Add the data object to the wrapper
                            $wrapper.data('uploadify', swfuploadify);

                            // Create the button
                            var $button = $('<div />', {
                                'id'    : settings.id + '-button',
                                'class' : 'uploadify-button ' + settings.buttonClass
                            });
                            if (settings.buttonImage) {
                                $button.css({
                                    'background-image' : "url('" + settings.buttonImage + "')",
                                    'text-indent'      : '-9999px'
                                });
                            }
                            $button.html('<span class="uploadify-button-text">' + settings.buttonText + '</span>')
                            .css({
                                'height'      : settings.height + 'px',
                                'line-height' : settings.height + 'px',
                                'width'       : settings.width + 'px'
                            });
                            // Append the button to the wrapper
                            $wrapper.append($button);

                            // Adjust the styles of the movie
                            $('#' + swfuploadify.movieName).css({
                                'position' : 'absolute',
                                'z-index'  : 1
                            });

                            // Create the file queue
                            if (!settings.queueID) {
                                var $queue = $('<div />', {
                                    'id'    : settings.id + '-queue',
                                    'class' : 'uploadify-queue'
                                });
                                $wrapper.after($queue);
                                swfuploadify.settings.queueID      = settings.id + '-queue';
                                swfuploadify.settings.defaultQueue = true;
                            }

                            // Create some queue related objects and variables
                            swfuploadify.queueData = {
                                files              : {}, // The files in the queue
                                filesSelected      : 0, // The number of files selected in the last select operation
                                filesQueued        : 0, // The number of files added to the queue in the last select operation
                                filesReplaced      : 0, // The number of files replaced in the last select operation
                                filesCancelled     : 0, // The number of files that were cancelled instead of replaced
                                filesErrored       : 0, // The number of files that caused error in the last select operation
                                uploadsSuccessful  : 0, // The number of files that were successfully uploaded
                                uploadsErrored     : 0, // The number of files that returned errors during upload
                                averageSpeed       : 0, // The average speed of the uploads in KB
                                queueLength        : 0, // The number of files in the queue
                                queueSize          : 0, // The size in bytes of the entire queue
                                uploadSize         : 0, // The size in bytes of the upload queue
                                queueBytesUploaded : 0, // The size in bytes that have been uploaded for the current upload queue
                                uploadQueue        : [], // The files currently to be uploaded
                                errorMsg           : 'Some files were not added to the queue:'
                            };

                            // Save references to all the objects
                            swfuploadify.original = $clone;
                            swfuploadify.wrapper  = $wrapper;
                            swfuploadify.button   = $button;
                            swfuploadify.queue    = $queue;

                            // Call the user-defined init event handler
                            if (settings.onInit) settings.onInit.call($this, swfuploadify);

                        } else {
                            console.warn('flash 未安装')
                            // Call the fallback function
                            if (settings.onFallback) settings.onFallback.call($this);

                        }
                    });

                },

                // Stop a file upload and remove it from the queue
                cancel : function(fileID, supressEvent) {

                    var args = arguments;

                    this.each(function() {
                        // Create a reference to the jQuery DOM object
                        var $this        = $(this),
                            swfuploadify = $this.data('uploadify'),
                            settings     = swfuploadify.settings,
                            delay        = -1;

                        if (args[0]) {
                            // Clear the queue
                            if (args[0] == '*') {
                                var queueItemCount = swfuploadify.queueData.queueLength;
                                $('#' + settings.queueID).find('.uploadify-queue-item').each(function() {
                                    delay++;
                                    if (args[1] === true) {
                                        swfuploadify.cancelUpload($(this).attr('id'), false);
                                    } else {
                                        swfuploadify.cancelUpload($(this).attr('id'));
                                    }
                                    $(this).find('.data').removeClass('data').html(' - Cancelled');
                                    //$(this).find('.uploadify-progress-bar').remove();
                                    $(this).delay(1000 + 100 * delay).fadeOut(500, function() {
                                    //  $(this).remove();
                                    });
                                });
                                swfuploadify.queueData.queueSize   = 0;
                                swfuploadify.queueData.queueLength = 0;
                                // Trigger the onClearQueue event
                                if (settings.onClearQueue) settings.onClearQueue.call($this, queueItemCount);
                            } else {
                                for (var n = 0; n < args.length; n++) {
                                    swfuploadify.cancelUpload(args[n]);
                                    $('#' + args[n]).find('.data').removeClass('data').html(' - Cancelled');
                                    $('#' + args[n]).find('.uploadify-progress-bar').remove();
                                    $('#' + args[n]).delay(1000 + 100 * n).fadeOut(500, function() {
                                        $(this).remove();
                                    });
                                }
                            }
                        } else {
                            var item = $('#' + settings.queueID).find('.uploadify-queue-item').get(0);
                            $item = $(item);
                            swfuploadify.cancelUpload($item.attr('id'));
                            $item.find('.data').removeClass('data').html(' - Cancelled');
                            $item.find('.uploadify-progress-bar').remove();
                            $item.delay(1000).fadeOut(500, function() {
                                $(this).remove();
                            });
                        }
                    });

                },

                // Revert the DOM object back to its original state
                destroy : function() {

                    this.each(function() {
                        // Create a reference to the jQuery DOM object
                        var $this        = $(this),
                            swfuploadify = $this.data('uploadify'),
                            settings     = swfuploadify.settings;

                        // Destroy the SWF object and
                        swfuploadify.destroy();

                        // Destroy the queue
                        if (settings.defaultQueue) {
                            $('#' + settings.queueID).remove();
                        }

                        // Reload the original DOM element
                        $('#' + settings.id).replaceWith(swfuploadify.original);

                        // Call the user-defined event handler
                        if (settings.onDestroy) settings.onDestroy.call(this);

                        delete swfuploadify;
                    });

                },

                // Disable the select button
                disable : function(isDisabled) {

                    this.each(function() {
                        // Create a reference to the jQuery DOM object
                        var $this        = $(this),
                            swfuploadify = $this.data('uploadify'),
                            settings     = swfuploadify.settings;

                        // Call the user-defined event handlers
                        if (isDisabled) {
                            swfuploadify.button.addClass('disabled');
                            if (settings.onDisable) settings.onDisable.call(this);
                        } else {
                            swfuploadify.button.removeClass('disabled');
                            if (settings.onEnable) settings.onEnable.call(this);
                        }

                        // Enable/disable the browse button
                        swfuploadify.setButtonDisabled(isDisabled);
                    });

                },

                // Get or set the settings data
                settings : function(name, value, resetObjects) {

                    var args        = arguments;
                    var returnValue = value;

                    this.each(function() {
                        // Create a reference to the jQuery DOM object
                        var $this        = $(this),
                            swfuploadify = $this.data('uploadify'),
                            settings     = swfuploadify.settings;

                        if (typeof(args[0]) == 'object') {
                            for (var n in value) {
                                setData(n,value[n]);
                            }
                        }
                        if (args.length === 1) {
                            returnValue =  settings[name];
                        } else {
                            switch (name) {
                                case 'uploader':
                                    swfuploadify.setUploadURL(value);
                                    break;
                                case 'formData':
                                    if (!resetObjects) {
                                        value = $.extend(settings.formData, value);
                                    }
                                    swfuploadify.setPostParams(settings.formData);
                                    break;
                                case 'method':
                                    if (value == 'get') {
                                        swfuploadify.setUseQueryString(true);
                                    } else {
                                        swfuploadify.setUseQueryString(false);
                                    }
                                    break;
                                case 'fileObjName':
                                    swfuploadify.setFilePostName(value);
                                    break;
                                case 'fileTypeExts':
                                    swfuploadify.setFileTypes(value, settings.fileTypeDesc);
                                    break;
                                case 'fileTypeDesc':
                                    swfuploadify.setFileTypes(settings.fileTypeExts, value);
                                    break;
                                case 'fileSizeLimit':
                                    swfuploadify.setFileSizeLimit(value);
                                    break;
                                case 'uploadLimit':
                                    swfuploadify.setFileUploadLimit(value);
                                    break;
                                case 'queueSizeLimit':
                                    swfuploadify.setFileQueueLimit(value);
                                    break;
                                case 'buttonImage':
                                    swfuploadify.button.css('background-image', settingValue);
                                    break;
                                case 'buttonCursor':
                                    if (value == 'arrow') {
                                        swfuploadify.setButtonCursor(SWFUpload.CURSOR.ARROW);
                                    } else {
                                        swfuploadify.setButtonCursor(SWFUpload.CURSOR.HAND);
                                    }
                                    break;
                                case 'buttonText':
                                    $('#' + settings.id + '-button').find('.uploadify-button-text').html(value);
                                    break;
                                case 'width':
                                    swfuploadify.setButtonDimensions(value, settings.height);
                                    break;
                                case 'height':
                                    swfuploadify.setButtonDimensions(settings.width, value);
                                    break;
                                case 'multi':
                                    if (value) {
                                        swfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILES);
                                    } else {
                                        swfuploadify.setButtonAction(SWFUpload.BUTTON_ACTION.SELECT_FILE);
                                    }
                                    break;
                            }
                            settings[name] = value;
                        }
                    });

                    if (args.length === 1) {
                        return returnValue;
                    }

                },

                // Stop the current uploads and requeue what is in progress
                stop : function() {

                    this.each(function() {
                        // Create a reference to the jQuery DOM object
                        var $this        = $(this),
                            swfuploadify = $this.data('uploadify');

                        // Reset the queue information
                        swfuploadify.queueData.averageSpeed  = 0;
                        swfuploadify.queueData.uploadSize    = 0;
                        swfuploadify.queueData.bytesUploaded = 0;
                        swfuploadify.queueData.uploadQueue   = [];

                        swfuploadify.stopUpload();
                    });

                },

                // Start uploading files in the queue
                upload : function() {

                    var args = arguments;

                    this.each(function() {
                        // Create a reference to the jQuery DOM object
                        var $this        = $(this),
                            swfuploadify = $this.data('uploadify');

                        // Reset the queue information
                        swfuploadify.queueData.averageSpeed  = 0;
                        swfuploadify.queueData.uploadSize    = 0;
                        swfuploadify.queueData.bytesUploaded = 0;
                        swfuploadify.queueData.uploadQueue   = [];

                        // Upload the files
                        if (args[0]) {
                            if (args[0] == '*') {
                                swfuploadify.queueData.uploadSize = swfuploadify.queueData.queueSize;
                                swfuploadify.queueData.uploadQueue.push('*');
                                swfuploadify.startUpload();
                            } else {
                                for (var n = 0; n < args.length; n++) {
                                    swfuploadify.queueData.uploadSize += swfuploadify.queueData.files[args[n]].size;
                                    swfuploadify.queueData.uploadQueue.push(args[n]);
                                }
                                swfuploadify.startUpload(swfuploadify.queueData.uploadQueue.shift());
                            }
                        } else {
                            swfuploadify.startUpload();
                        }

                    });

                }

            }

            // These functions handle all the events that occur with the file uploader
            var handlers = {

                // Triggered when the file dialog is opened
                onDialogOpen : function() {
                    // Load the swfupload settings
                    var settings = this.settings;

                    // Reset some queue info
                    this.queueData.errorMsg       = '该文件不能加入上传队列 ';
                    this.queueData.filesReplaced  = 0;
                    this.queueData.filesCancelled = 0;

                    // Call the user-defined event handler
                    if (settings.onDialogOpen) settings.onDialogOpen.call(this);
                },

                // Triggered when the browse dialog is closed
                onDialogClose :  function(filesSelected, filesQueued, queueLength) {
                    // Load the swfupload settings
                    var settings = this.settings;

                    // Update the queue information
                    this.queueData.filesErrored  = filesSelected - filesQueued;
                    this.queueData.filesSelected = filesSelected;
                    this.queueData.filesQueued   = filesQueued - this.queueData.filesCancelled;
                    this.queueData.queueLength   = queueLength;

                    // Run the default event handler
                    if ($.inArray('onDialogClose', settings.overrideEvents) < 0) {
                        if (this.queueData.filesErrored > 0) {
                            ui.error(this.queueData.errorMsg);
                        }
                    }

                    // Call the user-defined event handler
                    if (settings.onDialogClose) settings.onDialogClose.call(this, this.queueData);

                    // Upload the files if auto is true
                    if (settings.auto) $('#' + settings.id).uploadify('upload', '*');
                },

                // Triggered once for each file added to the queue
                onSelect : function(file) {
                    // Load the swfupload settings
                    var settings = this.settings;

                    // Check if a file with the same name exists in the queue
                    var queuedFile = {};
                    for (var n in this.queueData.files) {
                        queuedFile = this.queueData.files[n];
                        if (queuedFile.uploaded != true && queuedFile.name == file.name) {
                            var replaceQueueItem = confirm('文件 "' + file.name + '" 已经出现在队列中。 \n确定想替换掉在队列中已存在的文件?');
                            if (!replaceQueueItem) {
                                this.cancelUpload(file.id);
                                this.queueData.filesCancelled++;
                                return false;
                            } else {
                                $('#' + queuedFile.id).remove();
                                this.cancelUpload(queuedFile.id);
                                this.queueData.filesReplaced++;
                            }
                        }
                    }

                    // Get the size of the file
                    var fileSize = Math.round(file.size / 1024);
                    var suffix   = 'KB';
                    if (fileSize > 1000) {
                        fileSize = Math.round(fileSize / 1000);
                        suffix   = 'MB';
                    }
                    var fileSizeParts = fileSize.toString().split('.');
                    fileSize = fileSizeParts[0];
                    if (fileSizeParts.length > 1) {
                        fileSize += '.' + fileSizeParts[1].substr(0,2);
                    }
                    fileSize += suffix;

                    // Truncate the filename if it's too long
                    var fileName = file.name;
                    if (fileName.length > 25) {
                        fileName = fileName.substr(0,25) + '...';
                    }

                    // Create the file data object
                    itemData = {
                        'fileID'     : file.id,
                        'instanceID' : settings.id,
                        'fileName'   : fileName,
                        'fileSize'   : fileSize
                    }

                    // Create the file item template
                    if (settings.itemTemplate == false) {
                        settings.itemTemplate = '<div id="${fileID}" class="uploadify-queue-item">\
                            <div class="cancel">\
                                <a href="javascript:$(\'#${instanceID}\').uploadify(\'cancel\', \'${fileID}\')">X</a>\
                            </div>\
                            <span class="fileName">${fileName} (${fileSize})</span><span class="data"></span>\
                            <div class="uploadify-progress">\
                                <div class="uploadify-progress-bar"><!--Progress Bar--></div>\
                            </div>\
                        </div>';
                    }

                    // Run the default event handler
                    if ($.inArray('onSelect', settings.overrideEvents) < 0) {

                        // Replace the item data in the template
                        itemHTML = settings.itemTemplate;
                        for (var d in itemData) {
                            itemHTML = itemHTML.replace(new RegExp('\\$\\{' + d + '\\}', 'g'), itemData[d]);
                        }

                        // Add the file item to the queue
                        $('#' + settings.queueID).append(itemHTML);
                    }

                    this.queueData.queueSize += file.size;
                    this.queueData.files[file.id] = file;

                    // Call the user-defined event handler
                    if (settings.onSelect) settings.onSelect.apply(this, arguments);
                },

                // Triggered when a file is not added to the queue
                onSelectError : function(file, errorCode, errorMsg) {
                    // Load the swfupload settings
                    var settings = this.settings;

                    // Run the default event handler
                    if ($.inArray('onSelectError', settings.overrideEvents) < 0) {
                        switch(errorCode) {
                            case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
                                if (settings.queueSizeLimit > errorMsg) {
                                    //this.queueData.errorMsg += '\nThe number of files selected exceeds the remaining upload limit (' + errorMsg + ').';
                                    if(errorMsg==0) errorMsg = 1;
                                    this.queueData.errorMsg = '最多上传'+errorMsg+'个文件';
                                } else {
                                    this.queueData.errorMsg += '\nThe number of files selected exceeds the queue size limit (' + settings.queueSizeLimit + ').';
                                }
                                break;
                            case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                                this.queueData.errorMsg += '\n文件 "' + file.name + '"超出上传文件允许最大值 (' + settings.fileSizeLimit + ').';
                                break;
                            case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
                                this.queueData.errorMsg += '\n文件 "' + file.name + '"为空.';
                                break;
                            case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                                this.queueData.errorMsg += '\nThe file "' + file.name + '" is not an accepted file type (' + settings.fileTypeDesc + ').';
                                break;
                        }
                    }
                    if (errorCode != SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
                        delete this.queueData.files[file.id];
                    }

                    // Call the user-defined event handler
                    if (settings.onSelectError) settings.onSelectError.apply(this, arguments);
                },

                // Triggered when all the files in the queue have been processed
                onQueueComplete : function() {
                    if (this.settings.onQueueComplete) this.settings.onQueueComplete.call(this, this.settings.queueData);
                },

                // Triggered when a file upload successfully completes
                onUploadComplete : function(file) {
                    // Load the swfupload settings
                    var settings     = this.settings,
                        swfuploadify = this;

                    // Check if all the files have completed uploading
                    var stats = this.getStats();
                    this.queueData.queueLength = stats.files_queued;
                    if (this.queueData.uploadQueue[0] == '*') {
                        if (this.queueData.queueLength > 0) {
                            this.startUpload();
                        } else {
                            this.queueData.uploadQueue = [];

                            // Call the user-defined event handler for queue complete
                            if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);
                        }
                    } else {
                        if (this.queueData.uploadQueue.length > 0) {
                            this.startUpload(this.queueData.uploadQueue.shift());
                        } else {
                            this.queueData.uploadQueue = [];

                            // Call the user-defined event handler for queue complete
                            if (settings.onQueueComplete) settings.onQueueComplete.call(this, this.queueData);
                        }
                    }

                    // Call the default event handler
                    if ($.inArray('onUploadComplete', settings.overrideEvents) < 0) {
                        if (settings.removeCompleted) {
                            switch (file.filestatus) {
                                case SWFUpload.FILE_STATUS.COMPLETE:
                                    setTimeout(function() {
                                        if ($('#' + file.id)) {
                                            swfuploadify.queueData.queueSize   -= file.size;
                                            swfuploadify.queueData.queueLength -= 1;
                                            delete swfuploadify.queueData.files[file.id]
                                            $('#' + file.id).fadeOut(500, function() {
                                                $(this).remove();
                                            });
                                        }
                                    }, settings.removeTimeout * 1000);
                                    break;
                                case SWFUpload.FILE_STATUS.ERROR:
                                    if (!settings.requeueErrors) {
                                        setTimeout(function() {
                                            if ($('#' + file.id)) {
                                                swfuploadify.queueData.queueSize   -= file.size;
                                                swfuploadify.queueData.queueLength -= 1;
                                                delete swfuploadify.queueData.files[file.id];
                                                $('#' + file.id).fadeOut(500, function() {
                                                    $(this).remove();
                                                });
                                            }
                                        }, settings.removeTimeout * 1000);
                                    }
                                    break;
                            }
                        } else {
                            file.uploaded = true;
                        }
                    }

                    // Call the user-defined event handler
                    if (settings.onUploadComplete) settings.onUploadComplete.call(this, file);
                },

                // Triggered when a file upload returns an error
                onUploadError : function(file, errorCode, errorMsg) {
                    // Load the swfupload settings
                    var settings = this.settings;

                    // Set the error string
                    var errorString = 'Error';
                    switch(errorCode) {
                        case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
                            errorString = 'HTTP Error (' + errorMsg + ')';
                            break;
                        case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
                            errorString = 'Missing Upload URL';
                            break;
                        case SWFUpload.UPLOAD_ERROR.IO_ERROR:
                            errorString = 'IO Error';
                            break;
                        case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
                            errorString = 'Security Error';
                            break;
                        case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
                            ui.error('The upload limit has been reached (' + errorMsg + ').');
                            errorString = 'Exceeds Upload Limit';
                            break;
                        case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
                            errorString = 'Failed';
                            break;
                        case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
                            break;
                        case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
                            errorString = 'Validation Error';
                            break;
                        case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                            errorString = 'Cancelled';
                            this.queueData.queueSize   -= file.size;
                            this.queueData.queueLength -= 1;
                            if (file.status == SWFUpload.FILE_STATUS.IN_PROGRESS || $.inArray(file.id, this.queueData.uploadQueue) >= 0) {
                                this.queueData.uploadSize -= file.size;
                            }
                            // Trigger the onCancel event
                            if (settings.onCancel) settings.onCancel.call(this, file);
                            delete this.queueData.files[file.id];
                            break;
                        case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                            errorString = 'Stopped';
                            break;
                    }

                    // Call the default event handler
                    if ($.inArray('onUploadError', settings.overrideEvents) < 0) {

                        if (errorCode != SWFUpload.UPLOAD_ERROR.FILE_CANCELLED && errorCode != SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED) {
                            $('#' + file.id).addClass('uploadify-error');
                        }

                        // Reset the progress bar
                        $('#' + file.id).find('.uploadify-progress-bar').css('width','1px');

                        // Add the error message to the queue item
                        if (errorCode != SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND && file.status != SWFUpload.FILE_STATUS.COMPLETE) {
                            $('#' + file.id).find('.data').html(' - ' + errorString);
                        }
                    }

                    var stats = this.getStats();
                    this.queueData.uploadsErrored = stats.upload_errors;

                    // Call the user-defined event handler
                    if (settings.onUploadError) settings.onUploadError.call(this, file, errorCode, errorMsg, errorString);
                },

                // Triggered periodically during a file upload
                onUploadProgress : function(file, fileBytesLoaded, fileTotalBytes) {
                    // Load the swfupload settings
                    var settings = this.settings;

                    // Setup all the variables
                    var timer            = new Date();
                    var newTime          = timer.getTime();
                    var lapsedTime       = newTime - this.timer;
                    if (lapsedTime > 500) {
                        this.timer = newTime;
                    }
                    var lapsedBytes      = fileBytesLoaded - this.bytesLoaded;
                    this.bytesLoaded     = fileBytesLoaded;
                    var queueBytesLoaded = this.queueData.queueBytesUploaded + fileBytesLoaded;
                    var percentage       = Math.round(fileBytesLoaded / fileTotalBytes * 100);

                    // Calculate the average speed
                    var suffix = 'KB/s';
                    var mbs = 0;
                    var kbs = (lapsedBytes / 1024) / (lapsedTime / 1000);
                        kbs = Math.floor(kbs * 10) / 10;
                    if (this.queueData.averageSpeed > 0) {
                        this.queueData.averageSpeed = Math.floor((this.queueData.averageSpeed + kbs) / 2);
                    } else {
                        this.queueData.averageSpeed = Math.floor(kbs);
                    }
                    if (kbs > 1000) {
                        mbs = (kbs * .001);
                        this.queueData.averageSpeed = Math.floor(mbs);
                        suffix = 'MB/s';
                    }

                    // Call the default event handler
                    if ($.inArray('onUploadProgress', settings.overrideEvents) < 0) {
                        if (settings.progressData == 'percentage') {
                            $('#' + file.id).find('.data').html(' - ' + percentage + '%');
                        } else if (settings.progressData == 'speed' && lapsedTime > 500) {
                            $('#' + file.id).find('.data').html(' - ' + this.queueData.averageSpeed + suffix);
                        }
                        $('#' + file.id).find('.uploadify-progress-bar').css('width', percentage + '%');

                if( percentage == 100 ){
                         console.log('percentage == 100 ');
                }

                    }

                    // Call the user-defined event handler
                    if (settings.onUploadProgress) settings.onUploadProgress.call(this, file, fileBytesLoaded, fileTotalBytes, queueBytesLoaded, this.queueData.uploadSize);
                },

                // Triggered right before a file is uploaded
                onUploadStart : function(file) {
                    // Load the swfupload settings
                    var settings = this.settings;

                    // byron sampson 修改于2014/02/20 通过文件类型选择服务器 start
                    // var ext = file.type.toLowerCase();
              //       if(ext == ""){
              //           var index=file.name.lastIndexOf('.');
              //           ext=file.name.substr(index,8);
              //       }
              var ext = get_file_ext(file.name);
                    if(typeof(settings.vodFileExt)!='undefined' && settings.vodFileExt.indexOf('*.'+ext+';')!=-1){

                var vodData = settings.vodFormData;
                if( settings.vodType == 'qiniu'){
                  var key = newGuid();
                  vodData.key = key
                  //先把基本信息插入到数据库,然后返回的时候更新数据库里面的内容
                  var indata = {
                      "wym" : key,
                      "fjmc": file.name,
                      "ext" : 'mp4',
                      "size" : file.size,
                  };
                  $.ajax({
                      type: 'POST',
                      async:false,
                      url: settings.updateUrl,
                      data: indata,
                      success: (function (data) {
                          if(data['status'] == 1){
                            vodData.token = data.data.files.token;
                          }
                      })
                  });

                }

                        this.settings.upload_url = (typeof(settings.vodUploader) != 'undefined' ? settings.vodUploader : settings.uploader);
                        this.settings.post_params = (typeof(settings.vodFormData) != 'undefined' ? vodData : settings.formData);

                this.settings.file_post_name = 'file';
                this.settings.fileObjName = 'file';
                if(settings.vodType == 'local'){
                  this.settings.file_post_name = 'files';
                  this.settings.fileObjName = 'files';
                }


                    }else{
                        this.settings.upload_url = settings.uploader;
                        this.settings.post_params = (typeof(settings.FormData) != 'undefined' ? settings.FormData : {});
                        // 将文件域表单的名字填入post数据中
                        $(this.settings.post_params).attr('file_post_name',settings.fileObjName);
                    }
                    swfuploadify = window['uploadify_' + settings.id];
                    swfuploadify.setUploadURL(this.settings.upload_url);
                    swfuploadify.setPostParams(this.settings.post_params);
                    // byron sampson 修改于2014/02/20 通过文件类型选择服务器 end

                    var timer        = new Date();
                    this.timer       = timer.getTime();
                    this.bytesLoaded = 0;
                    if (this.queueData.uploadQueue.length == 0) {
                        this.queueData.uploadSize = file.size;
                    }
                    if (settings.checkExisting) {
                        $.ajax({
                            type    : 'POST',
                            async   : false,
                            url     : settings.checkExisting,
                            data    : {filename: file.name},
                            success : function(data) {
                                if (data == 1) {
                                    var overwrite = confirm('A file with the name "' + file.name + '" already exists on the server.\nWould you like to replace the existing file?');
                                    if (!overwrite) {
                                        this.cancelUpload(file.id);
                                        $('#' + file.id).remove();
                                        if (this.queueData.uploadQueue.length > 0 && this.queueData.queueLength > 0) {
                                            if (this.queueData.uploadQueue[0] == '*') {
                                                this.startUpload();
                                            } else {
                                                this.startUpload(this.queueData.uploadQueue.shift());
                                            }
                                        }
                                    }
                                }
                            }
                        });
                    }

                    // Call the user-defined event handler
                    if (settings.onUploadStart) settings.onUploadStart.call(this, file);
                },

                // Triggered when a file upload returns a successful code
                onUploadSuccess : function(file, data, response) {
                    // Load the swfupload settings
                    var settings = this.settings;
                    var stats    = this.getStats();
                    this.queueData.uploadsSuccessful = stats.successful_uploads;
                    this.queueData.queueBytesUploaded += file.size;

                    // Call the default event handler
                    if ($.inArray('onUploadSuccess', settings.overrideEvents) < 0) {
                        $('#' + file.id).find('.data').html(' - 上传完成');
                    }

                    //rickeryu Add 用于判断不同类型的东西，对应的信息，插入到数据库当中
                    var obj = eval('('+data+')');
                    var result = {};
                    var resultdata;
                    var ext = file.type.toLowerCase();
                    if(ext == ""){
                        var index=file.name.lastIndexOf('.');
                        ext=file.name.substr(index,8);
                    }
                    if(typeof(settings.vodFileExt)!='undefined' && settings.vodFileExt.indexOf('*'+ext+';')!=-1){

                        if( settings.vodType == 'qiniu' ){
                            var obj = eval('('+data+')');

                            $.ajax({
                                async: false,
                                type : "POST",
                                url : settings.upfileUrl,
                                data : obj,
                                success : function(fileinfo) {
                                    //console.log(fileinfo);
                                    resultdata = fileinfo;
                                },
                                error:function (data) {
                                    ui.error(fileinfo.info);
                                }
                            });
                            data = resultdata;
                            //console.log(data);
                        }else{
                            //如果是视频的话
                            //{"filedir":"files/2014-04","outfilename":"dlndhm3igcyi88w1.mp4","oldname":"excel_vba2_条件结构","filcode":"8w069toieuxvmmz0"}
                            result['fjmc'] = obj['oldname'];
                            result['fwq'] = settings.vodUrl;
                            result['fjlj'] = obj['filedir']+'/';
                            result['fjlx'] = 'application/octet-st';
                            result['fwdmc'] = obj['outfilename'];
                            result['fcode'] = obj['filcode'];
                            result['ext'] = 'mp4';
                            result['size'] = file.size;
                        }

                    }else{
                        //其他的正常操作
                        //console.log(file);console.log(data);
                        data = obj;
                    }
                    if(typeof(result['fjmc']) != 'undefined' && result['fjmc'] != '' && settings.vodType != 'qiniu'){
                        result['time'] = new Date().getTime();
                        $.ajax({
                            async: false,
                            type : "POST",
                            url : settings.updateUrl,
                            data : result,
                            success : function(fileinfo) {
                                resultdata = fileinfo;
                            },
                            error:function (data) {
                                ui.error(fileinfo.info);
                            }
                        });
                        data = resultdata;
                    }
                    //rickeryu End

                    // Call the user-defined event handler
                    if (settings.onUploadSuccess) settings.onUploadSuccess.call(this, file, data, response);
                }

            }

            $.fn.uploadify = function(method) {
                if (methods[method]) {
                    return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
                } else if (typeof method === 'object' || !method) {
                    return methods.init.apply(this, arguments);
                } else {
                    $.error('The method ' + method + ' does not exist in $.uploadify');
                }
            }
        })($);
        }else{
            console.warn('uploadify已加载')
        }
});